package com.seedwill.common.query;

import java.util.ArrayList;
import java.util.List;

import com.seedwill.common.util.ParaCheckHelper;

/**
 * 用于返回条件语句和参数
 * @author kdyi
 *
 */
public class WhereClausePara {

	/**
	 * SQL条件语句BUFFER
	 */
	private StringBuffer sqlClauseBuffer;
	/**
	 * SQL末语句BUFFER
	 */
	private StringBuffer tailerClauseBuffer;
	/**
	 * SQL参数容器
	 */
	private List<Object> sqlClausePara;
	
	public WhereClausePara(){
		//sqlClauseBuffer = new StringBuffer();
	}
	
	/**
	 * 取得SQL条件语句BUFFER
	 * @return
	 */
	public StringBuffer getSqlClauseBuffer() {
		ifInitedSqlClauseBuffer();
		return sqlClauseBuffer;
	}
	/**
	 * 设置SQL条件语句BUFFER
	 * @param sqlClauseBuffer
	 */
	public void setSqlClauseBuffer(StringBuffer sqlClauseBuffer) {
		this.sqlClauseBuffer = sqlClauseBuffer;
	}
	/**
	 * 取得SQL参数容器
	 * @return
	 */
	public List<Object> getSqlClausePara() {
		return sqlClausePara;
	}
	/**
	 * 设置SQL参数容器
	 * @param sqlClausePara
	 */
	public void setSqlClausePara(List<Object> sqlClausePara) {
		this.sqlClausePara = sqlClausePara;
	}
	/**
	 * 检查是否初始化SQL条件语句BUFFER，如未初始化则执行初始化
	 */
	private void ifInitedSqlClauseBuffer(){
		//oracle 1=1 / mssql: 1
		if(sqlClauseBuffer == null){
			sqlClauseBuffer = new StringBuffer(" where 1=1 ");
		}
	}
	/**
	 * 检查是否初始化SQL末语句BUFFER，如未初始化则执行初始化
	 */
	private void ifInitedTailerClauseBuffer(){
		//oracle 1=1 / mssql: 1
		if(tailerClauseBuffer == null){
			tailerClauseBuffer = new StringBuffer(" ");
		}
	}
	/**
	 * 检查是否初始化条件参数，如未初始化则执行初始化
	 */
	private void ifInitedClauseParas(){
		if(sqlClausePara == null){
			sqlClausePara = new ArrayList<Object>();
		}
	}
	
	/**
	 * 增加条件参数[作为字符串]
	 * @param ele
	 */
	public void addClauseParaAsString(Object ele){
		ifInitedClauseParas();
		if(ParaCheckHelper.notNull(ele)){
			sqlClausePara.add(ele);
		}
	}
	
	/**
	 * 增加一个参数对象 不能为空
	 * @param ele
	 */
	public void addClausePara(Object ele){
		ifInitedClauseParas();
		if(ParaCheckHelper.notNull(ele)){
			sqlClausePara.add(ele);
		}
	}
	/**
	 * 增加多个参数对象[数组] 不能为空
	 * @param eles
	 */
	public void addClauseParas(Object[] eles){
		ifInitedClauseParas();
		for(Object ele : eles){
			if(ParaCheckHelper.notNull(ele)){
				sqlClausePara.add(ele);
			}
		}
	}
	/**
	 * 增加多个参数对象[LIST] 不能为空
	 * @param eles
	 */
	public void addClauseParas(List<Object> eles){
		addClauseParas(eles, false);
	}
	/**
	 * 增加多个参数对象[LIST] 可设定是否检查不能为空
	 * @param eles
	 * @param foreCheckNull
	 */
	public void addClauseParas(List<Object> eles, boolean foreCheckNull){
		ifInitedClauseParas();
		if(foreCheckNull){
			for(Object ele : eles){
				if(ParaCheckHelper.notNull(ele)){
					sqlClausePara.add(ele);
				}
			}
		}else{
			sqlClausePara.addAll(eles);
		}

	}
	/**
	 * 删除参数对象
	 * @param ele
	 */
	public void removeClausePara(Object ele){
		ifInitedClauseParas();
		sqlClausePara.remove(ele);
	}
	/**
	 * 删除指定索引的参数对象
	 * @param eleIdx
	 */
	public void removeClauseParaAt(int eleIdx){
		ifInitedClauseParas();
		sqlClausePara.remove(eleIdx);
	}
	/**
	 *  清除参数对象
	 */
	public void cleanClausePara(){
		ifInitedClauseParas();
		sqlClausePara.clear();
	}

	/**
	 * 取得SQL末语句BUFFER
	 * @return
	 */
	public StringBuffer getTailerClauseBuffer() {
		ifInitedTailerClauseBuffer();
		return tailerClauseBuffer;
	}

	/**
	 * 设置SQL末语句BUFFER
	 * @param tailerClauseBuffer
	 */
	public void setTailerClauseBuffer(StringBuffer tailerClauseBuffer) {
		this.tailerClauseBuffer = tailerClauseBuffer;
	}
	
}
